package Game;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.jetty.websocket.WebSocket.Connection;

public class GameManager {
	private Map<Integer, Game> _allGames;
	private Game _currentGameJoining;
	final static int _nbMaxPlayer = 2;

	private static GameManager _instance;

	/**
	 * @return l'instance d'un gamemanager
	 */
	public static GameManager getInstance() {
		if (_instance == null) {
			_instance = new GameManager();
		}
		return _instance;
	}

	/**
	 * Constructeur
	 */
	private GameManager() {
		_allGames = new HashMap<Integer, Game>();
	}

	/**
	 * Ajoute une partie au gamemanager
	 * 
	 * @param con
	 */
	public void addGame(Connection con) {
		_currentGameJoining = new Game(_nbMaxPlayer);
		_allGames.put(_currentGameJoining.getId(), _currentGameJoining);
	}

	/**
	 * Doit disparaitre quand il y aura plusieurs game disponible dans le
	 * GameManager Utilisation de getGame(int id)
	 * 
	 * @return la partie courante
	 */
	public Game getLastGame() {
		return _currentGameJoining;
	}

	/**
	 * @param gameId
	 * @return la partie
	 */
	public Game getGame(int gameId) {
		Game g = _allGames.get(gameId);
		return g;
	}

	/**
	 * @return la partie courante a joindre
	 */
	public Game getCurrentGameJoining() {
		return _currentGameJoining;
	}

	/**
	 * Ajoute un joueur la partie
	 * 
	 * @param connection
	 * @return message
	 */
	public String newPlayer(Connection connection) {
		Game g = getLastGame();
		if (g.isFull())
			setNextGameToJoin(connection);

		g = getLastGame();
		String ms = g.newPlayer(connection);

		if (g.isFull())
			g.start();

		return ms;
	}

	/**
	 * Ajoute la prochaine partie au game manager
	 * 
	 * @param con
	 */
	private void setNextGameToJoin(Connection con) {
		_currentGameJoining = new Game(_nbMaxPlayer);
		_allGames.put(_currentGameJoining.getId(), _currentGameJoining);
	}
}
